﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidad;
using DAO;

public partial class AMBC_Usuarios : System.Web.UI.Page
{
     ABMCUsuarioInterface InterfazDAO;
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            nuevo();
            cargarTipoDoc();
            cargarGrilla();
            chkEsAdmin.Checked = false;
            btnEliminar.Enabled = false;
            //lblDomicilio.Visible = false;
            //lblTelefono.Visible = false;
            //txtTelefono.Visible = false;
            //txtDomicilio.Visible = false;
            if (this.Context.User.IsInRole("administradores"))
            {
                chkEsAdmin.Visible = true;
                lblEsAdmin.Visible = true;
                
               
                btnEliminar.Visible = true; 
              
            }
            else if (this.Context.User.IsInRole("estandar"))
            {
                chkEsAdmin.Visible = false;
                lblEsAdmin.Visible = false;
                btnEliminar.Enabled = false;
                btnEliminar.Visible = false;
            }
            rvFechaNac.MaximumValue = DateTime.Now.Date.ToString("dd/MM/yyyy");
   
        
        }
       
    }
    public void nuevo()
    {
        txtApellido.Text = string.Empty;
        txtDomicilio.Text = string.Empty;
        txtFechaNac.Text = string.Empty;
        txtNombre.Text = string.Empty;
        txtTelefono.Text = string.Empty;
        cbotipoDoc.SelectedIndex = 0;
        txtEmail.Text = string.Empty;
        txtContraseña.Text = string.Empty;
        txtComprobacion.Text = string.Empty;
        txtDocumento.Text = string.Empty;

        ViewState["id_Usuario"] = null;
        cargarGrilla();
    }

    public  void cargarTipoDoc()
    {
        PersonaDAO interfaz = new PersonaDAO();
        cbotipoDoc.DataSource = interfaz.obtenerTipoDoc();
        cbotipoDoc.DataTextField = "descripcion";
        cbotipoDoc.DataValueField = "id_TipoDocumento";
        cbotipoDoc.DataBind();
        cbotipoDoc.Items.Insert(0, new ListItem(("Sin Selección"), ""));
        cbotipoDoc.SelectedIndex = 0;
     }
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        nuevo();
    }

    public void cargarGrilla()
    {
        InterfazDAO = new UsuarioQueryDAO();
        

        if (this.Context.User.IsInRole("administradores"))
        {

            gvUsuarios.DataSource = InterfazDAO.ObtenerUsuariosQueryParaAdmin();

        }
        else if (this.Context.User.IsInRole("estandar"))
        {
            gvUsuarios.DataSource = InterfazDAO.ObtenerUsuariosQueryParaOtros();
        }

        //Guardo en la "Columna Oculta" el identificador único de la fila
        gvUsuarios.DataKeyNames = new string[] { "id_Usuario" };
        gvUsuarios.DataBind();
    }




   public void registrarUsuarioWeb()
    {

        if (ViewState["id_Usuario"] == null)
        {
            //es un alta
            if (verificarExistencia(int.Parse(txtDocumento.Text), int.Parse(cbotipoDoc.SelectedValue)))
            {
                ClientScript.RegisterStartupScript(GetType(), "alerta()", "alerta()", true);
                return;
            }
            else
            {
                //registroPersona
                PersonaEnt pers = new PersonaEnt();
                pers.documento = int.Parse(txtDocumento.Text);
                if (cbotipoDoc.SelectedIndex > 0)

                    pers.id_TipoDocumento = int.Parse(cbotipoDoc.SelectedValue);

                pers.Apellido = txtApellido.Text;
                pers.Nombre = txtNombre.Text;
                if (!string.IsNullOrEmpty(txtTelefono.Text))
                    pers.Telefono = long.Parse(txtTelefono.Text);
                if (!string.IsNullOrEmpty(txtDomicilio.Text))
                    pers.Domicilio = txtDomicilio.Text;
                
               pers.FechaNacimiento = DateTime.Parse(txtFechaNac.Text);
           

                //registro User
                int LegajoGenerado;
                UsuarioEnt user = new UsuarioEnt();
                user.Activo = true;
                user.Email = txtEmail.Text;
                user.FechaCreacion = DateTime.Today;
                user.Contraseña = txtContraseña.Text;

                if (chkEsAdmin.Checked == true)
                {
                    user.id_rol = 1;
                }
                else if (chkEsAdmin.Checked == false)
                {
                    user.id_rol = 2;
                }
                LegajoGenerado = generarLegajo(txtDocumento.Text);
                txtLegajoGenerado.Text = LegajoGenerado.ToString();
                user.Legajo = LegajoGenerado;
                UsuarioDAO userInterfaz = new UsuarioDAO();
                PersonaDAO personaInterfaz = new PersonaDAO();

                userInterfaz.registrarUsuario(user, personaInterfaz.registrarPersona(pers));

                ClientScript.RegisterStartupScript(GetType(), "da", "AvisoLegajoGenerado("+LegajoGenerado.ToString()+")", true);

                
            }

        }

        else if (ViewState["id_Usuario"] != null)
        {
            //estoy modificando
            InterfazDAO = new UsuarioDAO();
            UsuarioEnt usuarioSelec = InterfazDAO.buscarUsuario(int.Parse(ViewState["id_Usuario"].ToString()));
            PersonaEnt personaSelec = InterfazDAO.BuscarPersona(usuarioSelec.PersonaID);

            //ActualizoPersona

            personaSelec.documento = int.Parse(txtDocumento.Text);
            personaSelec.Apellido = txtApellido.Text;
            personaSelec.Nombre = txtNombre.Text;
            if (!string.IsNullOrEmpty(txtTelefono.Text))
                personaSelec.Telefono = long.Parse(txtTelefono.Text);
            if (!string.IsNullOrEmpty(txtDomicilio.Text))
                personaSelec.Domicilio = txtDomicilio.Text;
           // personaSelec.FechaNacimiento = Convert.ToDateTime(txtFechaNac.Text)
            personaSelec.FechaNacimiento = DateTime.Parse(txtFechaNac.Text);
            //personaSelec.FechaNacimiento.ToShortDateString();//--VER SI SOLUCIONA EL ERROR DE TIPO DE FECHA DE LA BD
            personaSelec.id_TipoDocumento = int.Parse(cbotipoDoc.SelectedValue);
            //Actualizo User
            if (chkEsAdmin.Checked == true)
            {
                usuarioSelec.id_rol = 1;
            }
            else if (chkEsAdmin.Checked == false)
            {
                usuarioSelec.id_rol = 2;
            }

            usuarioSelec.Activo = true;
            usuarioSelec.Email = txtEmail.Text;
            usuarioSelec.FechaCreacion = DateTime.Today;
            usuarioSelec.Contraseña = txtContraseña.Text;
            InterfazDAO.actualizarPersona(personaSelec);
            InterfazDAO.actualizarUsuario(usuarioSelec, usuarioSelec.PersonaID);

            nuevo();
            cargarGrilla();
           
        }
    }

    protected void btnOk_Click(object sender, EventArgs e)
    {
        if (!this.IsValid) //Si no es válida la pagina en el servidor termino la ejecucion del evento
            return;

        registrarUsuarioWeb();
        

        cargarGrilla();
        nuevo();
    }


    protected void gvUsuarios_SelectedIndexChanged(object sender, EventArgs e)
    {
        InterfazDAO = new UsuarioDAO();
       // PersonaDAO InterfazPersonaDAO = new PersonaDAO();
        int idUsuarioSelec;
        idUsuarioSelec = int.Parse(gvUsuarios.SelectedDataKey.Value.ToString());
        
        UsuarioEnt usuarioSelec = InterfazDAO.buscarUsuario(idUsuarioSelec);
        PersonaEnt personaSelec = InterfazDAO.BuscarPersona(usuarioSelec.PersonaID);
        if (usuarioSelec != null)
        {
            txtApellido.Text = personaSelec.Apellido;
            txtNombre.Text = personaSelec.Nombre;
            txtDocumento.Text = personaSelec.documento.ToString();
            if (personaSelec.Telefono.HasValue)
            {
                txtTelefono.Text = personaSelec.Telefono.ToString();

            }

            if (personaSelec.Domicilio != null)
            {
              txtDomicilio.Text = personaSelec.Domicilio;
             
            }

            ListItem tipoDocIt = cbotipoDoc.Items.FindByValue(personaSelec.id_TipoDocumento.ToString());
            cbotipoDoc.ClearSelection();
            if (tipoDocIt != null)
            {
                tipoDocIt.Selected = true;
            }
            if( usuarioSelec.id_rol == 1)
            {
               chkEsAdmin.Checked = true;
            }
            else
            {
                chkEsAdmin.Checked = false;
            }
            txtEmail.Text = usuarioSelec.Email.ToString();
            txtContraseña.Text = usuarioSelec.Contraseña;
            txtComprobacion.Text = txtContraseña.Text;
            txtFechaNac.Text = personaSelec.FechaNacimiento.ToShortDateString();
            ViewState["id_Usuario"] = usuarioSelec.id_Usuario;
            btnEliminar.Enabled = true;
        
        
        }

    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
      //Le cambio el estado de activo     
        InterfazDAO = new UsuarioDAO();
        InterfazDAO.borrarUsuario(int.Parse(ViewState["id_Usuario"].ToString())); //Enrealidad no lo borro , le cambio el estado activo a  "false"
        nuevo();
        cargarGrilla();
    }

    protected bool verificarExistencia(int documento,int tipoDoc)
    {
        InterfazDAO = new PersonaDAO();

        if (InterfazDAO.BuscarPersonaDocumento(documento, tipoDoc))
        {
            return true;
        }
        else
        {
            return false;
        }

    }
    protected int generarLegajo (string entrada)

    {
        return int.Parse(entrada.Substring(0,4));
        

    }


    //protected void chkAgregar_CheckedChanged(object sender, EventArgs e)
    //{
    //    if (chkAgregar.Checked == true)
    //    {
    //        txtTelefono.Visible = true;
    //        txtDomicilio.Visible = true;
    //        lblDomicilio.Visible = true;
    //        lblTelefono.Visible = true;
        
    //    }
    //    else if (chkAgregar.Checked == false)
    //    {
    //        lblDomicilio.Visible = false;
    //        lblTelefono.Visible = false;
    //        txtTelefono.Visible = false;
    //        txtDomicilio.Visible = false;
 
    //    }
    //}
    protected void btn_busqueda_Click(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(txtBusqueda.Text))
        {
            InterfazDAO = new UsuarioDAO();
            gvUsuarios.DataSource = InterfazDAO.buscarUsuarioFiltro(" AND Nombre LIKE '%" + txtBusqueda.Text + "%'");
            gvUsuarios.DataBind();
        }
        else
        {

            cargarGrilla();
        }
    }
}